package Model;

import java.io.*;
import java.util.*;
import java.io.File;


/**
 * Classe qui permet de gérer les informations des personnes notamment celles des fichiers
 * **/
public class Manageperson 
{
private static ArrayList <Person> maListedepersonne;
//private String tabb[];
//private Person p[]=null;
private Person p=null;

private String  Firstname1;
private String  Lastname1;
private String Homeaddress1;
private String Companyaddress1;
private String Phonemobile1;
private String Phonehome1;
private String Homepage1;
private String EmailPro1;
private String EmailPerso1;
private String Fblink1;
private String photo1;
private String group1;
/**Constructeur de la classe qui met à jour l'arraylist de l'ensemble des personnes
 * */
	public Manageperson()
	{
		setMaListedepersonne(new ArrayList<Person>());
		
	}
	/*Ajout dans le fichier la personne nouvelle
	 * **/
	
	public void addperson(Person p)
	{
		this.getMaListedepersonne().add(p);
		System.out.println("add arraylist" );
		int b=getMaListedepersonne().size();
		System.out.println("nbrdepersonnedslaliste "+b);
		 /* for (Person temp:maListedepersonne)
		  {
			  System.out.println(""+temp.Firstname());
		  }*/
	}
	

	/**Lecture du fichier et retour de l'arraylist
	 * **/
	public ArrayList <Person> read_file()
	{
		
		
	String filePath = "file.txt";
	String line;
	//String[] tabb;
	ArrayList <Person> allperson=null;
	StringTokenizer st;
	try{
	BufferedReader buff = new BufferedReader(new FileReader(filePath));
		try {
		
		

		// Lire le fichier ligne par ligne
		// La boucle se termine quand la méthode affiche "null"
				while ((line = buff.readLine()) != null) 
				{
				System.out.println(line);
		
				 st = new StringTokenizer(line, ",");
				while (st.hasMoreTokens()) 
				{
				//System.out.println(st.nextToken());
				 //Firstname1=st.nextToken();
				  Firstname1=st.nextToken();
				  Lastname1=st.nextToken();
				  Homeaddress1=st.nextToken();
				  Companyaddress1=st.nextToken();
				  Phonemobile1=st.nextToken();
				  Phonehome1=st.nextToken();
				  Homepage1=st.nextToken();
				  EmailPro1=st.nextToken();
				  EmailPerso1=st.nextToken();
				  Fblink1=st.nextToken();
				  photo1=st.nextToken();
				  group1=st.nextToken();
				} 
	   
				
				   //p=new Person(tabb[0],tabb[1],tabb[2],tabb[3],tabb[4],tabb[5],tabb[6],tabb[7],tabb[8],tabb[9],tabb[10],tabb[11]);
				  p=new Person(Firstname1, Lastname1,Homeaddress1,Companyaddress1,Phonemobile1,Phonehome1,Homepage1,EmailPro1,EmailPerso1,Fblink1,photo1,group1);
				 
				  this.getMaListedepersonne().add(p);
				
					}

				 allperson= getMaListedepersonne();
		   buff.close(); //Lecture fini donc on ferme le flux
		   
		    }
		
		catch (IOException e)
			{
			System.out.println(e.getMessage());
			System.exit(1);
			}
		}
	catch (IOException e) 
		{
		System.out.println(e.getMessage());
		System.exit(1);
		}
	return allperson;
	}
	
	/**Classe qui écrit dans le fichier dès modification
	 * **/
	public void write_file( ArrayList <Person> allperson )
	{
			 
			     
			     BufferedWriter writer;
				try {
					writer = new BufferedWriter(new FileWriter("file.txt"));
					//for (Person temp : getMaListedepersonne())
					for (Person temp : allperson)
				      { System.out.println("3");
				    	  System.out.println(""+temp.getFirstname()+ "," + temp.getLastname()+","+temp.getHomeaddress()+","+temp.getCompanyaddress()+","+
					        		temp.getPhonemobile()+","+temp.getPhonehome()+","+temp.getHomepage()+","+temp.getEmailPro()+","+temp.getEmailPerso()+","+
					        		temp.getFblink()+","+temp.getPhoto()+","+temp.getGroup());
				    	  writer.write(temp.getFirstname()+ "," + temp.getLastname()+","+temp.getHomeaddress()+","+temp.getCompanyaddress()+","+
				        		temp.getPhonemobile()+","+temp.getPhonehome()+","+temp.getHomepage()+","+temp.getEmailPro()+","+temp.getEmailPerso()+","+
				        		temp.getFblink()+","+temp.getPhoto()+","+temp.getGroup());
				    	  writer.newLine();
				    	  writer.flush();
					  }
					 // writer.write("Oh hi! :)");
					     writer.close();
				} 
				catch (IOException e) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			   
			     
			 
			  
	}
	
/**Classe qui permet de dupliquer une photo lorsqu'elle est mise dans le fichier de basse
 * **/
	public void duplication_picture( File source, File destination )
	{//Methode permettant la copie d'un fichier
		//boolean resultat = false;

		// Declaration des flux
		java.io.FileInputStream sourceFile=null;
		java.io.FileOutputStream destinationFile=null;
		
		System.out.println("ds la fonction duplication");
		try 
			{
			System.out.println("ds le try");
			// Création du fichier :
			destination.createNewFile();
			// Ouverture des flux
			sourceFile = new java.io.FileInputStream(source);
			destinationFile = new java.io.FileOutputStream(destination);
			// Lecture par segment de 0.5Mo
			byte buffer[]=new byte[512*1024];
			int nbLecture;
			while( (nbLecture = sourceFile.read(buffer)) != -1 ) 
				{
				destinationFile.write(buffer, 0, nbLecture);
				}

		// Copie réussie
		//resultat = true;
			} 
			catch( java.io.FileNotFoundException f ) 
			{
			} 
				catch( java.io.IOException e ) 
				{
				} 
		finally 
		{
		// Quoi qu'il arrive, on ferme les flux
		try 
			{
			sourceFile.close();
			} 
		
		catch(Exception e) 
			{
				
			}
		try 
			{
			destinationFile.close();
			} 
		catch(Exception e) 
			{ 
				
			}
		}
		//return( resultat );
		}

	

	


	/**Suppresion d'une personne dans l'arraylist totale
	 * **/
	public void delete(Person p1)
	{
		getMaListedepersonne().remove(p1);
	}
	
	/**Classe qui permet de retourner l"arraylist
	 * */

	public ArrayList <Person> getMaListedepersonne()
	{
		return maListedepersonne;
	}

	/**Classe qui permet d'imposer une arraylist de personne au nouvel objet manageperson
	 * */
	
	public static void setMaListedepersonne(ArrayList <Person> maListedepersonne) 
	{
		Manageperson.maListedepersonne = maListedepersonne;
	}
	


}
